import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * @author wcj
 * @Date 2021/6/17 10:11
 * @Version 1.0
 */
public class HashMapDeadLock {

    public static void main(String[] args) throws InterruptedException {
        test();
    }

    /**
     * HashMap的线程不安全是因为多线程下，HashMap的Entry节点会出现环化，一旦形成环形数据结构，那么就会形成死循环
     * HashTable的线程安全，但是效率低下，因为其方法都是通过synchronized进行线程同步，多个线程只能同时竞争同一把锁
     *
     * @throws InterruptedException
     */
    public static void test() throws InterruptedException {
        final Map<String, String> map = new HashMap<>(2);
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10000; i++) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            map.put(UUID.randomUUID().toString(), "");
                        }
                    }, "ftf" + i).start();
                }
            }
        }, "ftf");
        t.start();
        t.join();
    }
}
